Uec3.JsModuleListWindow = Ext.extend(Ext.app.Module, {
			gridStore : null,
			createJsModule : function() {
				var desktop = this.app.getDesktop();
				var detailWindow = new Uec3.JsModuleDetailWindow();
				detailWindow.init();
				detailWindow.createWindow(this.app);
			},
			modifyJsModule : function(rowIndex) {
				var record = this.gridStore.getAt(rowIndex);
				var desktop = this.app.getDesktop();
				var detailWindow = new Uec3.JsModuleDetailWindow();
				detailWindow.init();
				detailWindow.createWindow(this.app, record);
			},
			createElements : function() {
				var module = this;
				module.gridStore = new Ext.data.Store({
							proxy : new Ext.data.HttpProxy({
										url : Uec3.App.Constants.homeUrl + "/jsmodule/list.do"
									}),

							baseParams : {
								start : 0,
								limit : 19
							},
							remoteSort : true,
							reader : new Ext.data.JsonReader({
										totalProperty : 'total',
										root : 'items'
									}, [{
												name : 'id'
											}, {
												name : 'moduleId'
											}, {
												name : 'type'
											}, {
												name : 'className'
											}, {
												name : 'scriptUrl'
											}, {
												name : 'stylesheetUrl'
											}, {
												name : 'initParams'
											}, {
												name : 'launcher.iconCls'
											}, {
												name : 'launcher.shortcutIconCls'
											}, {
												name : 'launcher.text'
											}, {
												name : 'launcher.tooltip'
											}, {
												name : 'permissionId'
											}, {
												name : 'permissionName'
											}])
						});

				var loadGridStore = function(queryParam) {
					if (queryParam) {
						for (var p in queryParam) {
							module.gridStore.baseParams[p] = queryParam[p];
						}
					}
					module.gridStore.load({
								callback : function(records, options, success) {
									if (success) {
										var total = records.length;
										if (Ext.isEmpty(total)) {
											Ext.MessageBox.alert("提示", "未找到相关记录");
										}
									} else {
										Ext.MessageBox.alert("提示", "数据加载异常...");
									}
								}
							});
				}

				var gridColumnAction = {
					header : "操作",
					width : 40,
					sortable : false,
					dataIndex : 'id',
					renderer : this.moduleActionRenderer([{
								func : "modifyJsModule",
								desc : "编辑",
								reader : function(value, cellmeta, record, rowIndex, columnIndex, store) {
									return rowIndex;
								}
							}])
				};
				var gridColumnModel = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), gridColumnAction, {
							header : '模块ID',
							width : 80,
							sortable : false,
							dataIndex : 'id'
						}, {
							header : '模块标识',
							width : 200,
							sortable : false,
							dataIndex : 'moduleId'
						}, {
							header : '模块Script类名',
							width : 280,
							sortable : false,
							dataIndex : 'className'
						}, {
							header : 'Script地址',
							width : 350,
							sortable : false,
							dataIndex : 'scriptUrl'
						}, {
							header : '模块名称',
							width : 150,
							sortable : false,
							dataIndex : 'launcher.text'
						}, {
							header : '模块提示信息',
							width : 180,
							sortable : false,
							dataIndex : 'launcher.tooltip'
						}, {
							header : '权限ID',
							width : 80,
							sortable : false,
							dataIndex : 'permissionId'
						}, {
							header : '权限名称',
							width : 150,
							sortable : false,
							dataIndex : 'permissionName'
						}, {
							header : '样式文件地址',
							width : 200,
							sortable : false,
							dataIndex : 'stylesheetUrl'
						}, {
							header : '模块图标样式',
							width : 180,
							sortable : false,
							dataIndex : 'launcher.iconCls'
						}, {
							header : '模块快捷方式样式',
							width : 180,
							sortable : false,
							dataIndex : 'launcher.shortcutIconCls'
						}, {
							header : '初始化参数',
							width : 300,
							sortable : false,
							dataIndex : 'initParams'
						}]);
				var gridPanel = new Ext.grid.GridPanel({
							enableColumnMove : false,
							enableColumnMoveResize : false,
							stripeRows : true,
							autoScroll : true,
							width : '100%',
							// height : 520,
							loadMask : {
								msg : '...加载数据中'
							},
							tbar : new Ext.Toolbar([{
										text : '新增模块',
										iconCls : 'icon-add',
										handler : function() {
											module.createJsModule();
										}
									}]),
							bbar : new Ext.PagingToolbar({
										pageSize : 19,
										store : module.gridStore,
										displayInfo : true,
										displayMsg : '第 {0} - {1} 条  共 {2} 条',
										emptyMsg : '没有记录'
									}),
							iconCls : 'acc-icon',
							// title : 'JS模块列表',
							cm : gridColumnModel,
							store : module.gridStore
						});

				var searchPanel = new Ext.FormPanel({
							frame : true,
							height : 40,
							border : false,
							items : [{
										layout : 'column',
										items : [{
													columnWidth : 0.25,
													items : [{
																layout : 'form',
																labelWidth : 55,
																items : [{
																			xtype : 'textfield',
																			fieldLabel : '模块标识',
																			name : 'moduleId',
																			width : 180,
																			anchor : '100%'
																		}]
															}]
												}, {
													columnWidth : 0.25,
													items : [{
																layout : 'form',
																labelWidth : 85,
																items : [{
																			xtype : 'textfield',
																			fieldLabel : '　　模块名称',
																			name : 'launcherText',
																			width : 180,
																			anchor : '100%'
																		}]
															}]
												}, {
													columnWidth : 0.25,
													items : [{
																layout : 'form',
																labelWidth : 75,
																items : [{
																			xtype : 'textfield',
																			fieldLabel : '　　权限ID',
																			name : 'permissionId',
																			width : 180,
																			anchor : '100%'
																		}]
															}]
												}, {
													xtype : 'button',
													text : '　查找　',
													style : {
														marginLeft : '15px',
														width : '75px'
													},
													handler : function() {
														loadGridStore(searchPanel.getForm().getValues());
													}
												}]
									}]
						});

				var fullPanel = new Ext.Panel({
							border : false,
							// layout : 'form',
							items : [searchPanel, gridPanel]
						});

				loadGridStore.call(this);
				// gridStore.load();
				return fullPanel;
			},

			init : function(initParams) {
				// this.detailWindow = new Uec3.TaskDetailWindow();
				// this.detailWindow.init();
			},

			createWindow : function() {
				var win = null;
				var desktop = this.app.getDesktop();
				win = desktop.getWindow('jsModuleListWin');
				if (!win) {
					win = desktop.createWindow({
						        id : 'jsModuleListWin',
								title : 'JS模块列表',
								iconCls : 'acc-icon',
								taskbuttonTooltip : 'JS模块列表',
								width : '100%',
								shim : false,
								animCollapse : false,
								constrainHeader : true,
								maximizable : true,
								maximized : true,

								listeners : {
									'resize' : function(win, width, height) {
										var grid = win.items.get(0).get(1);
										var winMinWidth = 900;
										var winMinHeight = 440;
										if (width < winMinWidth || height < winMinHeight) {
											win.setWidth(winMinWidth);
											win.setHeight(winMinHeight);
											grid.setHeight(winMinHeight - 72);
										} else {
											grid.setHeight(height - 72);
										}
									}
								},
								items : this.createElements()
							});
				}
				win.show();
			}
		});

Uec3.JsModuleDetailWindow = Ext.extend(Ext.app.Module, {
			detailFormAjax : null,
			createElements : function(jsmodule) {

				var detailFormPanel = new Ext.form.FormPanel({
							border : false,
							frame : true,
							height : 310,
							items : [{
										xtype : 'fieldset',
										title : '基本信息',
										height : 90,
										collapsed : false,
										items : [{
													layout : 'column',
													items : [{
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						name : 'id',
																						fieldLabel : 'id',
																						xtype : 'hidden'
																					}, {
																						xtype : 'textfield',
																						fieldLabel : '模块标识',
																						name : 'moduleId',
																						width : 150,
																						anchor : '98%',
																						allowBlank : false,
																						blankText : "模块标识不能为空！"
																					}]
																		}, {
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						name : 'permissionId',
																						fieldLabel : 'permissionId',
																						xtype : 'hidden'
																					}, {
																						xtype : 'textfield',
																						fieldLabel : '访问权限',
																						name : 'permissionName',
																						width : 150,
																						anchor : '98%'
																					}]
																		}]
															}, {
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						fieldLabel : '模块名称',
																						name : 'launcher.text',
																						anchor : '98%',
																						allowBlank : false,
																						blankText : "模块名称不能为空！"
																					}]
																		}, {
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						fieldLabel : '提示信息',
																						name : 'launcher.tooltip',
																						anchor : '98%'
																					}]
																		}]
															}]
												}]
									}, {
										xtype : 'fieldset',
										title : 'Script信息',
										height : 90,
										items : [{
													layout : 'column',
													items : [{
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textarea',
																						autoScroll : false,
																						height : 50,
																						fieldLabel : '脚本位置',
																						name : 'scriptUrl',
																						anchor : '98%',
																						allowBlank : false,
																						blankText : "脚本位置不能为空！"
																					}]
																		}]
															}, {
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						fieldLabel : '模块JS类名',
																						name : 'className',
																						anchor : '98%',
																						allowBlank : false,
																						blankText : "模块JS类名不能为空！"
																					}]
																		}, {
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						fieldLabel : '初始化参数',
																						name : 'initParams',
																						anchor : '98%'
																					}]
																		}]
															}]
												}]
									}, {
										xtype : 'fieldset',
										title : 'CSS样式配置',
										height : 90,
										items : [{
													layout : 'column',
													labelWidth : 70,
													items : [{
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textarea',
																						autoScroll : false,
																						height : 50,
																						fieldLabel : 'CSS地址',
																						name : 'stylesheetUrl',
																						anchor : '98%'
																					}]
																		}]
															}, {
																columnWidth : 0.5,
																items : [{
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						fieldLabel : '模块图标样式',
																						name : 'launcher.iconCls',
																						anchor : '98%'
																					}]
																		}, {
																			layout : 'form',
																			labelWidth : 80,
																			labelAlign : 'right',
																			items : [{
																						xtype : 'textfield',
																						name : 'launcher.shortcutIconCls',
																						fieldLabel : '快捷方式样式',
																						anchor : '98%'
																					}]
																		}]
															}]
												}]
									}]
						});

				return detailFormPanel;
			},

			init : function(initParams) {
				this.detailFormAjax = new Ext.data.Connection();
				this.detailFormAjax.on('beforerequest', function() {
							Ext.MessageBox.wait("保存数据中...", "提示");
						});

				this.detailFormAjax.on('requestcomplete', function() {
							Ext.MessageBox.hide();
						});

			},

			createWindow : function(app, jsmodule) {
				var hasData = jsmodule && jsmodule.id > 0;
				var winId = "jsmodule-detail-" + (hasData ? jsmodule.id : "0");
				var desktop = app.getDesktop();
				var module = this;
				var win = desktop.getWindow(winId);
				if (!win) {
					var detailFormPanel = this.createElements(jsmodule);
					var titleName = "新增JS模块-按ESC键退出";
					var tooltip = "新增JS模块";
					var actionName = "新增";
					var subUrl = "/jsmodule/add.do";
					if (hasData) {
						// 初始化JsModule
						detailFormPanel.getForm().loadRecord(jsmodule);
						titleName = "编辑JS模块-按ESC键退出";
						tooltip = "编辑JS模块";
						actionName = "编辑";
						subUrl = "/jsmodule/modify.do";
					}
					win = desktop.createWindow({
								id : winId,
								title : titleName,
								iconCls : 'acc-icon',
								taskbuttonTooltip : tooltip,
								width : 680,
								shim : false,
								animCollapse : false,
								constrainHeader : true,
								maximizable : true,
								maximized : false,
								listeners : {
									'resize' : function(win, width, height) {
										var grid = win.items.get(0);
										var winMinWidth = 680;
										var winMinHeight = 370;
										if (width < winMinWidth || height < winMinHeight) {
											win.setWidth(winMinWidth);
											win.setHeight(winMinHeight);
											grid.setHeight(winMinHeight - 28);
										} else {
											grid.setHeight(height - 28);
										}
									}
								},
								items : detailFormPanel,
								buttons : [{
											text : actionName,
											handler : function() {
												var detailForm = detailFormPanel.getForm();
												if (!detailForm.isValid()) {
													Ext.Msg.alert("提示", "请按要求进行正确操作!");
													return;
												}
												var formValues = detailForm.getValues();

												module.detailFormAjax.request({
															url : Uec3.App.Constants.homeUrl + subUrl,
															success : function(res) {
																var result = Ext.decode(res.responseText);
																if (result && result.id > 0) {
																	detailForm.findField("id").setValue(result.id);
																	Ext.Msg.alert('提示', "操作成功!");
																} else {
																	Ext.Msg.alert("提示", "操作失败!");
																}

															},
															failure : function(res) {
																Ext.Msg.alert('失败', "网络出现异常,请重先连接");
															},
															params : formValues
														});
											}
										}, {
											text : '关闭',
											handler : function() {
												win.close();
											}
										}]
							});
				}
				win.show();
			}
		});